import {defineStore} from 'pinia'
import {loginApi, logoutApi, registerApi,updateInfoApi} from "../apis/userAPI.js";
//定义一个处理用户信息的方法

//相当于窗机爱你一个用户信息库，里面已经存好了用户信息，所以再调用的时候既可以直接获取用户信息，也可以直接通过使用里面的函数来进行获取用户信息
export const useUserStore = defineStore(
    'user',   //存储在浏览器中的localStorage的key
    () => {   //回调函数
        // 1. 定义管理用户数据的state
        const userInfo = ref({})


        const clearUserInfo = () => {  //清除用户信息
            userInfo.value = {}
        }


        const userLogin = async (account, password) => {
            const res = await loginApi(account, password)
            console.log("登录返回结果", res)
            userInfo.value = res.data
            console.log("登录返回结果", res.data)
            console.log(userInfo.value)
            return res
        }

        const userRegister = async (account, password, checkPassword) => {
            console.log(account, password, checkPassword)
            const res = await registerApi(account, password, checkPassword)
            if (res.code === 200) {
                userInfo.value = res.data
            }
            console.log("注册返回结果", res)
            console.log(userInfo.value)
            return res
        }


        const getLogout = async () => {
            try {
                const res = await logoutApi()
                console.log("登出返回结果", res)
                
                // 无论后端返回什么状态码，都清除本地用户信息
                // 因为401表示已经退出，200表示成功退出
                if (res.code === 200 || res.code === 401) {
                    clearUserInfo()
                }
                
                return res
            } catch (error) {
                console.error('退出登录API调用失败:', error)
                // 即使API调用失败，也清除本地用户信息，确保用户能够退出
                clearUserInfo()
                throw error
            }
        }


    

        const updateUserInfo = async (user) => {
            console.log("进入userStore")
            const res = await updateInfoApi(user)
            console.log("更新信息返回结果", res)

            if (res.code === 200) {
                userInfo.value = res.data
            }
            return res
        }


        // 3. 以对象的格式把state和action return
        return {
            userInfo,
            user: userInfo, // 添加user别名，方便访问
            updateUserInfo,
            getLogout,
            userLogin,
            userRegister,
            clearUserInfo,
        }
    }, {            //持久化存储，存储到了浏览器中的localStorage
        persist: true
    }
)